home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 145 / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin / games / spassion / source.lzh / SOURCE / XSP.C < prev    next >
Text File  |  2000-03-31  |  4KB  |  146 lines

  1. /*
  2.  *        スプライト周りの初期設定
  3.  */
  4. /*#include <stdio.h>*/
  5.  
  6. #include <string.h>
  7. #include <XSP2lib.H>
  8. #include <PCM8Afnc.H>
  9. #include "SPASSION.H"
  10. #include "SUB.H"
  11.  
  12. #define RGB(r,g,b) ((g)<<11|(r)<<6|(b)<<1)
  13.  
  14. #define PCG_MAX        4096        /* スプライトPCGパターン最大使用数 */
  15. #define FRM_MAX        16192        /* 複合スプライトフレームデータ最大使用数 */
  16. #define REF_MAX        2048        /* 複合スプライトリファレンスデータ最大使用数 */
  17.  
  18. #define PAL_MAX        15            /* スプライトパレットパターン最大使用数 */
  19.  
  20. static char pcg_alt[PCG_MAX + 1];                /* PCG配置管理テーブル */
  21. static char pcg_dat[PCG_MAX * 128];                /* PCGデータファイル読み込みバッファ */
  22. static XOBJ_REF_DAT ref_dat[REF_MAX];            /* リファレンスデータ */
  23. static XOBJ_FRM_DAT frm_dat[FRM_MAX];            /* フレームデータ */
  24. static unsigned short    pal_dat[ PAL_MAX*16 ] ;    /* パレットデータファイル読み込みバッファ */
  25.  
  26. static int sizeof_pcg = 0;    /* スプライトPCGパターン読み込み数 */
  27. static int sizeof_ref = 0;    /* 複合スプライトリファレンスデータ読み込み数 */
  28. static int sizeof_frm = 0;    /* 複合スプライトフレームデータ読み込み数 */
  29.  
  30. /* SP データ読み込み */
  31. static short LoadSP (char *fname)
  32. {
  33.     int p;
  34.     short sp_no = sizeof_pcg / 128;
  35.     char temp_fname[92];
  36.  
  37.     strcpy (temp_fname, fname);
  38.     strcat (temp_fname, ".SP");
  39.     p = LoadFile(temp_fname, &pcg_dat[sizeof_pcg], sizeof (char), 128 * PCG_MAX - sizeof_pcg);
  40.  
  41.     sizeof_pcg += p;
  42.  
  43. #ifdef DEBUG
  44.     printf ("%s を読み込みました sp_no = %hd\n", fname, sp_no);
  45. #endif
  46.     return (sp_no);
  47. }
  48.  
  49.  
  50. /* XSP 各種データ読み込み */
  51. static short LoadXSP (char *fname)
  52. {
  53.     int i;
  54.     int p, f, r;
  55.     short obj_no = sizeof_ref;
  56.     char temp_fname[92];
  57.  
  58.     strcpy (temp_fname, fname);
  59.     strcat (temp_fname, ".FRM");
  60.     f = LoadFile (temp_fname, &frm_dat[sizeof_frm], sizeof (XOBJ_FRM_DAT), FRM_MAX - sizeof_frm);
  61.  
  62.     strcpy (temp_fname, fname);
  63.     strcat (temp_fname, ".REF");
  64.     r = LoadFile (temp_fname, &ref_dat[sizeof_ref], sizeof (XOBJ_REF_DAT), REF_MAX - sizeof_ref);
  65.  
  66.     strcpy (temp_fname, fname);
  67.     strcat (temp_fname, ".XSP");
  68.     p = LoadFile (temp_fname, &pcg_dat[sizeof_pcg], sizeof (char), 128 * PCG_MAX - sizeof_pcg);
  69.  
  70.     /* FRM_DAT[].pt 補正 */
  71.     for (i = 0; i < f; i++)
  72.         frm_dat[sizeof_frm + i].pt += sizeof_pcg / 128;
  73.  
  74.     /* REF_DAT[].ptr 補正 */
  75.     for (i = 0; i < r; i++)
  76.         (int) ref_dat[sizeof_ref + i].ptr += (int) (&frm_dat[sizeof_frm]);
  77.     sizeof_pcg += p;
  78.     sizeof_frm += f;
  79.     sizeof_ref += r;
  80.  
  81. #ifdef DEBUG
  82.     printf ("%s を読み込みました sizeof_ref = %hd\n", fname, obj_no);
  83. #endif
  84.  
  85.     return (obj_no);
  86. }
  87.  
  88. /* スプライトデータの読み込み、設定 */
  89. void LoadXSPFile( void )
  90. {
  91.     int        size=0;
  92.     obj_boss1    = LoadXSP("SP/BOSS01");
  93.     obj_boss2    = LoadXSP("SP/BOSS02");
  94.     obj_boss3    = LoadXSP("SP/BOSS03");
  95.     obj_boss4    = LoadXSP("SP/BOSS04");
  96.     obj_boss_m00= LoadXSP("SP/BOSS_M00");
  97.     obj_boss_m01= LoadXSP("SP/BOSS_M01");
  98.     obj_dragon    = LoadXSP("SP/DRAGON");
  99.     obj_effect    =  LoadSP("SP/EFFECT");
  100.     obj_explall    = LoadXSP("SP/EXPLALL");
  101.     obj_hahen    = LoadXSP("SP/HAHEN");
  102.     obj_hatch    = LoadXSP("SP/HATCH");
  103.     obj_item    =  LoadSP("SP/ITEM");
  104.     obj_lboss    = LoadXSP("SP/LBOSS");
  105.     obj_mine    = LoadXSP("SP/MINE");
  106.     obj_moji    =  LoadSP("SP/MOJI");
  107.     obj_obj        =  LoadSP("SP/OBJ");
  108.     obj_obj_b    = LoadXSP("SP/OBJ_B");
  109.     obj_option    =  LoadSP("SP/OPTION");
  110.     obj_player    = LoadXSP("SP/PLAYER");
  111.     obj_shot    =  LoadSP("SP/SHOT");
  112.     obj_shot_b    = LoadXSP("SP/SHOT_B");
  113.  
  114.     obj_titspark= LoadXSP("SP/TITSPARK");
  115.     obj_zako    =  LoadSP("SP/ZAKO");
  116.     obj_zako_k    =  LoadSP("SP/ZAKO_K");
  117.  
  118.     size    = LoadFile( "SP/SP.PAL", pal_dat, sizeof(unsigned short),15*16 );
  119. }
  120.  
  121. /*----------------[ XSPシステムを初期化 ]----------------*/
  122. void InitXSP( void )
  123. {
  124.     int        i=0;
  125.     unsigned short *pal=(unsigned short *)0xE82220;
  126.  
  127.  
  128.     xsp_on() ;                        /* XSPシステムを組み込む */
  129.     xsp_mode( xsp_mode_num ) ;
  130.  
  131.     xsp_pcgdat_set( pcg_dat            /* PCGデータを指定 */
  132.                   , pcg_alt            /* PCG配置管理テーブルを指定 */
  133.                   , sizeof(pcg_alt)    /* PCG配置管理テーブルのサイズを指定 */
  134.                   ) ;
  135.  
  136.     xsp_objdat_set( ref_dat ) ;        /* 複合スプライト形状データを指定 */
  137.     pcm8a_vsyncint_on();
  138.  
  139.     xsp_pcgmask_on(0,63);        /* BGキャラ分空けておく */
  140.     xsp_pcgmask_on(192,255);    /* BG1分空けておく */
  141.  
  142. /*パレット設定*/
  143.     for(i=0;i<PAL_MAX*16;i++)
  144.         *(pal++)=pal_dat[i];
  145. }
  146.